package hocusPocus.IHM;

import hocusPocus.Cartes.Carte;
import hocusPocus.Controllers.ControllerLimiteCarteMain;
import hocusPocus.Partie.Joueur;
import hocusPocus.Partie.Plateau;

import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;

import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;

import com.mortennobel.imagescaling.experimental.ImprovedMultistepRescaleOp;

public class LimiteCarteMain extends JFrame {
	private static final long serialVersionUID = 1L;
	private Plateau plateau;
	private Joueur joueurCourant;
	public Hashtable<JToggleButton, Carte> tableCorrespondance;
	public static Carte carteSelectionneeMain;
	public JButton btnDefausser;
	public JToggleButton jbutton;
	public JPanel panelMain;
	private InterfacePlateau interfacePlateau;
	private ControllerLimiteCarteMain controller;
	public LimiteCarteMain(InterfacePlateau interfacePlateau) {

		setIconImage(Toolkit.getDefaultToolkit().getImage(
				LimiteCarteMain.class.getResource("/images/icone.gif")));
		setResizable(false);

		plateau = Plateau.getInstance();
		joueurCourant = plateau.getJoueurCourant();

		tableCorrespondance = new Hashtable<JToggleButton, Carte>();
		this.interfacePlateau = interfacePlateau;
		getContentPane().setLayout(new GridLayout(1, 1, 0, 0));

		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.setSize(990, 506);
		this.setTitle("Mettre en Defausse des cartes en Main");
		this.setLocationRelativeTo(this.getParent()); // Centrer la fenetre

		JPanel panel = new JPanel();
		getContentPane().add(panel);
		panel.setLayout(new GridLayout(2, 1, 0, 0));

		panelMain = new JPanel();
		panelMain.setBorder(new TitledBorder(null, "Cartes en Main",
				TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.add(panelMain);

		JPanel Boutons = new JPanel();
		panel.add(Boutons);
		Boutons.setLayout(null);
		controller = new ControllerLimiteCarteMain(this, joueurCourant, tableCorrespondance);
		btnDefausser = new JButton("D\u00E9fausser");
		btnDefausser.addActionListener(controller);
		btnDefausser.setBounds(437, 79, 117, 23);
		Boutons.add(btnDefausser);

		JLabel lblVousNePouvez = new JLabel(
				"Vous ne pouvez avoir que 5 cartes en Main Maximum !");
		lblVousNePouvez.setHorizontalAlignment(SwingConstants.CENTER);
		lblVousNePouvez.setBounds(10, 11, 964, 14);
		Boutons.add(lblVousNePouvez);

		JLabel lblVeuillezSlectionnerLes = new JLabel(
				"Veuillez s\u00E9lectionner les cartes que vous souhaitez mettre sur la pile de d\u00E9fausse.");
		lblVeuillezSlectionnerLes.setHorizontalAlignment(SwingConstants.CENTER);
		lblVeuillezSlectionnerLes.setBounds(10, 42, 964, 14);
		Boutons.add(lblVeuillezSlectionnerLes);

		afficherMain();

		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

	public void afficherMain() {
		BufferedImage imageCarte = null;
		final ButtonGroup groupeBoutonsCartesMain = new ButtonGroup();
		for (int i = 0; i < joueurCourant.getMain().size(); i++) { // Affichage
																	// main
			jbutton = new JToggleButton("");
			imageCarte = resize(joueurCourant.getMain().get(i).getRecto(), 95,
					160);
			jbutton.setIcon(new ImageIcon(imageCarte));
			jbutton.setToolTipText(joueurCourant.getMain().get(i)
					.getInfoBulle());

			panelMain.add(jbutton);
			groupeBoutonsCartesMain.add(jbutton);
			tableCorrespondance.put(jbutton, joueurCourant.getMain().get(i));
			jbutton.addActionListener(controller);
		}
	}

	public void rafraichirAfficherMain() {
		panelMain.removeAll();
		panelMain.revalidate();
		afficherMain();
	}

	public static BufferedImage resize(String nomImageCarte, int width,
			int height) {
		BufferedImage img = null;
		ImprovedMultistepRescaleOp resampleOp = new ImprovedMultistepRescaleOp(
				width, height);
		try {
			img = ImageIO.read(new File("./src/images/"
					+ nomImageCarte.replace("hocusPocus.Cartes.", "")));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return resampleOp.filter(img, null);
	}
}
